/**
 * 
 */
package com.urlshow.pinyin;

import java.io.UnsupportedEncodingException;

/**
 * @author ender
 * 
 */
public class Utils {
	static final String[] yb = { "āáǎàā", "ĀÁǍÀĀ", "ōóǒòō", "ŌÓǑÒŌ", "ēéěèē",
			"ĒÉĚÈĒ", "īíǐìī", "ūúǔùū", "ǖǘǚǜǖ" };
	static final char[] abc = { 'a', 'A', 'o', 'O', 'e', 'E', 'i', 'u', 'ü' };
	static final int[][] unicode = { { 0x4E00, 0x9FA5 }, // CJK Unified
															// Ideographs 1.1
			{ 0x2F800, 0x2FA1D }, // CJK Compatibility Supplement 3.1
			{ 0x3400, 0x4DB5 },// CJK Unified Ideographs Extension A 3.0
			{ 0x9FA6, 0x9FBB }, // CJK Unified Ideographs 4.1
			{ 0xF900, 0xFA2D }, // CJK Compatibility Ideographs 1.1
			{ 0xFA30, 0xFA6A }, // CJK Compatibility Ideographs 3.2
			{ 0xFA70, 0xFAD9 }, // CJK Compatibility Ideographs 4.1
			{ 0x20000, 0x2A6D6 }, // CJK Unified Ideographs Extension B 3.1
			{ 0x2E80, 0x2EFF }, // CJK部首补充
			{ 0x2F00, 0x2FDF }, // 康熙部首
	};
	static final int[][] range = { { 12295, }, { 19968, 19973 },
			{ 19975, 20022 }, { 20024, 20035 }, { 20037, 20041 },
			{ 20043, 20058 }, { 20060, 20067 }, { 20070, 20070 },
			{ 20072, 20075 }, { 20077, 20077 }, { 20080, 20081 },
			{ 20083, 20089 }, { 20094, 20102 }, { 20104, 20137 },
			{ 20139, 20156 }, { 20158, 20177 }, { 20179, 20325 },
			{ 20327, 20327 }, { 20329, 20387 }, { 20389, 20454 },
			{ 20456, 20542 }, { 20544, 20645 }, { 20647, 20750 },
			{ 20752, 20846 }, { 20848, 20857 }, { 20859, 20902 },
			{ 20904, 20966 }, { 20968, 20968 }, { 20971, 21248 },
			{ 21251, 21254 }, { 21256, 21376 }, { 21378, 21392 },
			{ 21394, 21435 }, { 21437, 21501 }, { 21503, 21593 },
			{ 21595, 21717 }, { 21719, 21719 }, { 21721, 21722 },
			{ 21724, 21787 }, { 21789, 21790 }, { 21792, 21796 },
			{ 21798, 21880 }, { 21882, 21943 }, { 21945, 21996 },
			{ 21998, 22003 }, { 22005, 22025 }, { 22027, 22052 },
			{ 22054, 22137 }, { 22139, 22160 }, { 22163, 22176 },
			{ 22178, 22221 }, { 22223, 22228 }, { 22231, 22309 },
			{ 22311, 22326 }, { 22329, 22407 }, { 22409, 22409 },
			{ 22411, 22441 }, { 22443, 22447 }, { 22449, 22450 },
			{ 22452, 22485 }, { 22487, 22542 }, { 22544, 22545 },
			{ 22547, 22591 }, { 22593, 22639 }, { 22641, 22682 },
			{ 22684, 22712 }, { 22714, 22742 }, { 22744, 22761 },
			{ 22763, 22764 }, { 22766, 22791 }, { 22793, 22800 },
			{ 22802, 22813 }, { 22815, 22842 }, { 22844, 22860 },
			{ 22862, 23055 }, { 23057, 23123 }, { 23125, 23149 },
			{ 23151, 23153 }, { 23155, 23175 }, { 23177, 23191 },
			{ 23193, 23210 }, { 23212, 23281 }, { 23283, 23299 },
			{ 23301, 23323 }, { 23325, 23338 }, { 23340, 23346 },
			{ 23348, 23349 }, { 23351, 23398 }, { 23400, 23584 },
			{ 23586, 23638 }, { 23640, 23669 }, { 23672, 23682 },
			{ 23684, 23739 }, { 23741, 23741 }, { 23743, 23748 },
			{ 23750, 23775 }, { 23777, 23817 }, { 23819, 23924 },
			{ 23927, 23930 }, { 23932, 23989 }, { 23991, 23998 },
			{ 24000, 24041 }, { 24043, 24043 }, { 24046, 24059 },
			{ 24061, 24136 }, { 24138, 24164 }, { 24166, 24209 },
			{ 24211, 24291 }, { 24293, 24300 }, { 24302, 24384 },
			{ 24386, 24388 }, { 24390, 24467 }, { 24469, 24473 },
			{ 24475, 24633 }, { 24635, 24636 }, { 24639, 24694 },
			{ 24696, 24868 }, { 24870, 24880 }, { 24882, 24911 },
			{ 24913, 25074 }, { 25076, 25173 }, { 25175, 25250 },
			{ 25252, 25367 }, { 25369, 25382 }, { 25384, 25443 },
			{ 25445, 25524 }, { 25527, 25528 }, { 25530, 25594 },
			{ 25597, 25686 }, { 25688, 25781 }, { 25783, 25819 },
			{ 25822, 25881 }, { 25883, 25981 }, { 25983, 26047 },
			{ 26049, 26068 }, { 26070, 26242 }, { 26244, 26324 },
			{ 26326, 26337 }, { 26339, 26384 }, { 26386, 26404 },
			{ 26406, 26415 }, { 26417, 26432 }, { 26434, 26465 },
			{ 26469, 26527 }, { 26529, 26531 }, { 26533, 26599 },
			{ 26601, 26626 }, { 26628, 26629 }, { 26631, 26636 },
			{ 26638, 26677 }, { 26679, 26714 }, { 26716, 26716 },
			{ 26719, 26809 }, { 26812, 26905 }, { 26908, 26912 },
			{ 26914, 26914 }, { 26916, 26917 }, { 26922, 26923 },
			{ 26925, 27005 }, { 27007, 27008 }, { 27010, 27017 },
			{ 27021, 27100 }, { 27102, 27104 }, { 27106, 27180 },
			{ 27183, 27183 }, { 27185, 27249 }, { 27254, 27255 },
			{ 27257, 27257 }, { 27260, 27313 }, { 27315, 27337 },
			{ 27339, 27347 }, { 27349, 27363 }, { 27365, 27365 },
			{ 27367, 27380 }, { 27382, 27382 }, { 27384, 27403 },
			{ 27406, 27412 }, { 27414, 27422 }, { 27424, 27459 },
			{ 27461, 27481 }, { 27483, 27548 }, { 27550, 27611 },
			{ 27614, 27614 }, { 27616, 27629 }, { 27631, 27637 },
			{ 27639, 27677 }, { 27679, 27745 }, { 27748, 27771 },
			{ 27773, 27931 }, { 27933, 27979 }, { 27981, 28068 },
			{ 28070, 28174 }, { 28176, 28265 }, { 28267, 28268 },
			{ 28270, 28291 }, { 28293, 28297 }, { 28300, 28487 },
			{ 28490, 28528 }, { 28530, 28572 }, { 28574, 28663 },
			{ 28665, 28716 }, { 28719, 28751 }, { 28753, 28763 },
			{ 28765, 28786 }, { 28788, 28862 }, { 28864, 28900 },
			{ 28902, 28905 }, { 28907, 28909 }, { 28911, 28928 },
			{ 28930, 28944 }, { 28947, 28984 }, { 28986, 28988 },
			{ 28993, 29038 }, { 29040, 29045 }, { 29048, 29068 },
			{ 29070, 29076 }, { 29079, 29107 }, { 29109, 29148 },
			{ 29151, 29172 }, { 29175, 29197 }, { 29199, 29207 },
			{ 29209, 29215 }, { 29217, 29234 }, { 29236, 29270 },
			{ 29272, 29471 }, { 29473, 29510 }, { 29512, 29539 },
			{ 29541, 29678 }, { 29680, 29713 }, { 29715, 29754 },
			{ 29756, 29792 }, { 29794, 29836 }, { 29838, 29842 },
			{ 29844, 29859 }, { 29861, 29875 }, { 29877, 29926 },
			{ 29928, 29935 }, { 29939, 29943 }, { 29945, 29947 },
			{ 29949, 29956 }, { 29958, 29997 }, { 29999, 30034 },
			{ 30036, 30047 }, { 30049, 30056 }, { 30058, 30309 },
			{ 30311, 30326 }, { 30328, 30580 }, { 30582, 30746 },
			{ 30748, 30780 }, { 30782, 30802 }, { 30804, 30807 },
			{ 30809, 30810 }, { 30812, 30822 }, { 30824, 30834 },
			{ 30837, 30839 }, { 30841, 30900 }, { 30902, 30902 },
			{ 30904, 30934 }, { 30936, 30957 }, { 30959, 31009 },
			{ 31011, 31052 }, { 31054, 31128 }, { 31130, 31138 },
			{ 31140, 31267 }, { 31270, 31298 }, { 31300, 31313 },
			{ 31315, 31324 }, { 31326, 31333 }, { 31335, 31342 },
			{ 31344, 31395 }, { 31397, 31398 }, { 31400, 31420 },
			{ 31422, 31489 }, { 31491, 31544 }, { 31546, 31548 },
			{ 31550, 31612 }, { 31614, 31661 }, { 31663, 31695 },
			{ 31697, 31697 }, { 31699, 31762 }, { 31764, 31790 },
			{ 31792, 31809 }, { 31811, 31821 }, { 31823, 31840 },
			{ 31842, 31873 }, { 31875, 31887 }, { 31889, 31912 },
			{ 31914, 31916 }, { 31918, 31935 }, { 31937, 31959 },
			{ 31961, 32154 }, { 32156, 32210 }, { 32212, 32212 },
			{ 32214, 32260 }, { 32262, 32262 }, { 32264, 32331 },
			{ 32333, 32358 }, { 32360, 32399 }, { 32401, 32575 },
			{ 32577, 32584 }, { 32586, 32597 }, { 32599, 32757 },
			{ 32759, 32769 }, { 32771, 32832 }, { 32834, 32850 },
			{ 32852, 32865 }, { 32868, 32889 }, { 32891, 33022 },
			{ 33024, 33035 }, { 33037, 33061 }, { 33063, 33169 },
			{ 33171, 33315 }, { 33317, 33342 }, { 33344, 33351 },
			{ 33353, 33363 }, { 33365, 33372 }, { 33374, 33375 },
			{ 33377, 33477 }, { 33479, 33551 }, { 33553, 33553 },
			{ 33555, 33597 }, { 33599, 33633 }, { 33635, 33722 },
			{ 33724, 33816 }, { 33818, 33821 }, { 33824, 33824 },
			{ 33827, 33924 }, { 33926, 33929 }, { 33931, 33934 },
			{ 33936, 33986 }, { 33988, 34008 }, { 34010, 34011 },
			{ 34013, 34013 }, { 34015, 34019 }, { 34021, 34259 },
			{ 34261, 34292 }, { 34294, 34321 }, { 34323, 34324 },
			{ 34326, 34351 }, { 34353, 34371 }, { 34374, 34417 },
			{ 34419, 34542 }, { 34544, 34633 }, { 34635, 34725 },
			{ 34728, 34728 }, { 34730, 34767 }, { 34769, 34804 },
			{ 34806, 34867 }, { 34869, 34895 }, { 34897, 34980 },
			{ 34982, 34989 }, { 34991, 34991 }, { 34993, 35010 },
			{ 35013, 35014 }, { 35016, 35075 }, { 35077, 35099 },
			{ 35102, 35140 }, { 35142, 35175 }, { 35177, 35190 },
			{ 35192, 35196 }, { 35198, 35203 }, { 35206, 35501 },
			{ 35503, 35586 }, { 35588, 35592 }, { 35594, 36107 },
			{ 36109, 36119 }, { 36121, 36271 }, { 36273, 36365 },
			{ 36367, 36525 }, { 36527, 36532 }, { 36534, 36538 },
			{ 36541, 36541 }, { 36543, 36548 }, { 36550, 36551 },
			{ 36553, 36683 }, { 36685, 36777 }, { 36779, 36790 },
			{ 36792, 36794 }, { 36797, 36811 }, { 36813, 36825 },
			{ 36827, 36849 }, { 36851, 36902 }, { 36904, 36949 },
			{ 36951, 36963 }, { 36965, 37019 }, { 37021, 37027 },
			{ 37029, 37101 }, { 37103, 37210 }, { 37213, 37370 },
			{ 37372, 37415 }, { 37417, 37417 }, { 37420, 37550 },
			{ 37552, 37601 }, { 37603, 37617 }, { 37619, 37619 },
			{ 37621, 37690 }, { 37692, 37694 }, { 37696, 37697 },
			{ 37699, 37700 }, { 37702, 37765 }, { 37767, 37817 },
			{ 37819, 37819 }, { 37823, 37870 }, { 37872, 37872 },
			{ 37875, 37921 }, { 37924, 37989 }, { 37992, 38281 },
			{ 38283, 38297 }, { 38299, 38313 }, { 38315, 38336 },
			{ 38338, 38349 }, { 38352, 38374 }, { 38376, 38520 },
			{ 38522, 38678 }, { 38680, 38714 }, { 38716, 38732 },
			{ 38734, 38831 }, { 38833, 38868 }, { 38870, 39081 },
			{ 39083, 39113 }, { 39115, 39406 }, { 39408, 39409 },
			{ 39411, 39671 }, { 39673, 39799 }, { 39802, 39829 },
			{ 39833, 39856 }, { 39859, 39859 }, { 39861, 39873 },
			{ 39875, 39885 }, { 39890, 39920 }, { 39924, 39959 },
			{ 39961, 39961 }, { 39963, 39983 }, { 39985, 40026 },
			{ 40028, 40040 }, { 40043, 40047 }, { 40049, 40175 },
			{ 40177, 40234 }, { 40236, 40261 }, { 40265, 40291 },
			{ 40294, 40332 }, { 40335, 40336 }, { 40338, 40362 },
			{ 40364, 40638 }, { 40640, 40869 } };

	private Utils() {
	}

	/**
	 * 判断字符是否是中文字符
	 * 
	 * @param c
	 *            待判断的字符
	 * @return 是否是中文汉字
	 */
	public static boolean isChinese(char c) {
		for (int[] u : unicode) {
			if (c >= u[0] && c <= u[1])
				return true;
		}
		return false;
	}

	/**
	 * 字符是否有拼音
	 * 
	 * @param c
	 *            待判断的字符
	 * @return 是否有拼音
	 */
	public static boolean hasPinYin(char c) {
		for (int[] u : range) {
			if (c < u[0])
				return false;
			if ((u.length == 1 && c == u[0])
					|| (u.length == 2 && c >= u[0] && c <= u[1]))
				return true;
		}
		return false;
	}

	/**
	 * 将字母替换成拼音符号
	 * 
	 * @param str
	 *            英文字母
	 * @return 拼音符号
	 */
	public static String abc2py(String str) {
		String old = str.replace('v', 'ü');
		StringBuffer sb = new StringBuffer();
		for (int f = 0; f < abc.length; f++)
			for (int i = 0; i < old.length(); i++) {
				if (abc[f] == old.toCharArray()[i]) {
					if (i > 0)
						sb.append(old.substring(0, i));
					sb.append(yb[f].toCharArray()[Integer.parseInt(old
							.substring(old.length() - 1)) - 1]);
					if (i < old.length() - 2)
						sb.append(old.substring(i + 1, old.length() - 1));
					return sb.toString();
				}
			}
		return "";
	}

	/**
	 * 半角转换
	 * 
	 * @param str
	 *            文字
	 * @return 输出
	 */
	public static String SBCchange(String str) {
		String outStr = "";
		String Tstr = "";
		byte[] b = null;

		for (int i = 0; i < str.length(); i++) {
			try {
				Tstr = str.substring(i, i + 1);
				b = Tstr.getBytes("unicode");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}

			if (b[3] == -1) {
				b[2] = (byte) (b[2] + 32);
				b[3] = 0;

				try {
					outStr = outStr + new String(b, "unicode");
				} catch (UnsupportedEncodingException e) {
					e.printStackTrace();
				}
			} else
				outStr = outStr + Tstr;
		}

		return outStr;
	}
}
